package lesson4

import "fmt"

// Get取数据
func (dq *DataQueue) Get() (out interface{}) {
	//获取读锁
	//dq.ReadLock.Lock()
	//defer dq.ReadLock.Unlock()

	dq.EmptyCon.L.Lock()
	defer dq.EmptyCon.L.Unlock()
	// 判断缓冲区是否空
	for dq.WritePoint == dq.ReadPoint {
		// 缓冲区为空，则等待数据录入
		dq.EmptyCon.Wait()
	}
	fmt.Printf("Pop DataQueue index: %d\n", (dq.ReadPoint)%dq.Cap)
	out = dq.Data[(dq.ReadPoint)%dq.Cap]
	dq.ReadPoint = (dq.ReadPoint + 1) % dq.Cap
	// 通知可以录入数据
	dq.FullCon.Signal()
	return out
}
